package com.daliu.exception;

import com.daliu.pojo.vo.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * SpringMVC的异常处理类
 * 在web项目开发中遇到异常后,采用异常抛出的形式:
 *      dao --->  Service --->  Controller --->  SpringMVC框架
 *      SpringMVC框架中有统一异常处理机制,可以处理项目抛出的所有异常
 *      处理异常的类由我们(程序员)提供
 */
//
//@ControllerAdvice : 给Controller层的建议,当Controller层抛出异常后,找带有此注解的类
//@ResponseBody : 当前类中的所有方法的返回值都要转成json写回给浏览器
// @RestControllerAdvice = @ControllerAdvice + @ResponseBody
@RestControllerAdvice
public class ProjectExceptionAdvice {

    /**
     * 此方法用于处理ArithmeticException异常
     * @param ex
     * @return
     */
    @ExceptionHandler(ArithmeticException.class)
    public Result doException(ArithmeticException ex){
        System.out.println("异常代码执行了...");
        // 打印异常信息
        ex.printStackTrace();
        return new Result(false,"10001","算数异常拉...");
    }

    /**
     * 当前方法将会捕获Exception
     */
    @ExceptionHandler(Exception.class)
    public Result doException(Exception ex){
        // 打印异常信息
        ex.printStackTrace();
        return new Result(false,"10000","服务器忙,稍后重试...");
    }
}
